package com.awccis.common.utils;

import com.awccis.admin.model.pay.MerchantNeedPayBean;
import com.awccis.admin.model.pay.MerchantPaDetailInfo;
import com.awccis.admin.model.pay.PaySimpleInfoBean;
import com.awccis.admin.service.AdminService;
import com.awccis.admin.service.AdminServiceOrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Calendar;
import java.util.List;

/**
 * @author: txp
 * @date: 2018/5/30 on 下午3:10
 * @since: 1.0
 * @description:
 */
@Component("taskJob")
public class QuartzTask {

    /**
     * 日志打印对象
     */
    private Logger logger = LoggerFactory.getLogger(QuartzTask.class);

    @Resource
    private AdminService adminService;
    @Resource
    private AdminServiceOrderService adminServiceOrderService;


    /**
     * CRON表达式                含义
     "0 0 12 * * ?"            每天中午十二点触发
     "0 15 10 ? * *"            每天早上10：15触发
     "0 15 10 * * ?"            每天早上10：15触发
     "0 15 10 * * ? *"        每天早上10：15触发
     "0 15 10 * * ? 2005"    2005年的每天早上10：15触发
     "0 * 14 * * ?"            每天从下午2点开始到2点59分每分钟一次触发
     "0 0/5 14 * * ?"        每天从下午2点开始到2：55分结束每5分钟一次触发
     "0 0/5 14,18 * * ?"        每天的下午2点至2：55和6点至6点55分两个时间段内每5分钟一次触发
     "0 0-5 14 * * ?"        每天14:00至14:05每分钟一次触发
     "0 10,44 14 ? 3 WED"    三月的每周三的14：10和14：44触发
     "0 15 10 ? * MON-FRI"   每个周一、周二、周三、周四、周五的10：15触发
     */

    /**
     * 每周日的零点计算出每个司机的应缴费用并提示司机缴纳
     */
    @Scheduled(cron = "0 1 0 ? * MON")
    public void testTask() {
        Calendar cl = Calendar.getInstance();
        int week = cl.get(Calendar.WEEK_OF_YEAR)-1;
        cl.add(Calendar.DAY_OF_MONTH, -7);
        int year = cl.get(Calendar.YEAR);
        if (week < cl.get(Calendar.WEEK_OF_YEAR)) {
            year += 1;
        }
        String payWeek = year + "年第" + week + "周";

        System.out.println("当前时间"+System.currentTimeMillis() + payWeek);
        List<PaySimpleInfoBean> allDriverNeedPay = adminService.getAllDriverNeedPay(payWeek);

        System.out.println("支付费用司机：" + allDriverNeedPay);
        logger.info("计算本周("+payWeek+")所有需要向平台缴纳费用的司机：" + allDriverNeedPay);

        List<MerchantPaDetailInfo> allMerchantNeedPay = adminServiceOrderService.getMerchantNeedPay("first", payWeek);

        System.out.println("支付费用商户：" + allMerchantNeedPay);
        logger.info("计算本周("+payWeek+")所有需要向平台缴纳费用的商户：" + allMerchantNeedPay);
    }
}
